home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / ARGONET / PD / FILER / TARSRC.SPK / c / perms < prev    next >
Text File  |  1993-11-10  |  2KB  |  113 lines

  1.  
  2. /* permission handling */
  3.  
  4. #include <stdio.h>
  5. #include "perms.h"
  6.  
  7.  
  8. long unix_to_fs_perms(int unixmode) {
  9.   long fsmode;
  10.   
  11.   fsmode = 0;
  12.   if (unixmode & ROWN)
  13.     fsmode |= fs_ROWN;
  14.   if (unixmode & ROTH)
  15.     fsmode |= fs_ROTH;
  16.   if (unixmode & WOWN)
  17.     fsmode |= fs_WOWN;
  18.   if (unixmode & WOTH)
  19.     fsmode |= fs_WOTH;
  20.   return(fsmode);
  21. } /* unix_to_fs_perms */
  22.  
  23.  
  24. int fs_to_unix_perms(long fsmode, long LoadAddress) {
  25.   int unixmode;
  26.   
  27.   unixmode = 0;
  28.   if (fsmode & fs_ROWN)
  29.     unixmode |= ROWN;
  30.   if (fsmode & fs_ROTH)
  31.     unixmode |= ROTH;
  32.   if (!(fsmode & fs_LCKD)) {
  33.     if (fsmode & fs_WOWN)
  34.       unixmode |= WOWN;
  35.     if (fsmode & fs_WOTH)
  36.       unixmode |= WOTH;
  37.   }
  38.  
  39.   if (LoadAddress & 0xFFF00000) {
  40.     switch ((LoadAddress >> 8) & 0xFFF) {
  41.       case ft_Obey:
  42.       case ft_Absolute:
  43.       case ft_Module:
  44.       case ft_BASIC:
  45.       case ft_Utility:
  46.       case ft_Command:
  47.         unixmode |= XOWN;
  48.         if (unixmode & ROTH && unixmode & ROWN)
  49.           unixmode |= XOTH;
  50.         break;
  51.       default:
  52.         break;
  53.     }
  54.   } else {
  55.     unixmode |= XOWN;
  56.     if (unixmode & ROTH && unixmode & ROWN)
  57.       unixmode |= XOTH;
  58.   }
  59.  
  60.   return(unixmode);
  61. } /* fs_to_unix_perms */
  62.  
  63.  
  64. int unix_dir_perms(long fsmode) {
  65.   int unixmode;
  66.   
  67.   unixmode = 0;
  68.  
  69.   unixmode |= ROWN;
  70.   unixmode |= XOWN;
  71.   if (!(fsmode & fs_LCKD)) {
  72.     unixmode |= WOWN;
  73.     if (fsmode & fs_ROTH) {
  74.       unixmode |= ROTH;
  75.       unixmode |= XOTH;
  76.       unixmode |= WOTH;
  77.     }
  78.   }
  79.   return(unixmode);
  80. } /* unix_dir_perms */
  81.  
  82.  
  83. int     m1[] = { 1, ROWN, 'r', '-' };
  84. int     m2[] = { 1, WOWN, 'w', '-' };
  85. int     m3[] = { 2, SUID, 's', XOWN, 'x', '-' };
  86. int     m4[] = { 1, RGRP, 'r', '-' };
  87. int     m5[] = { 1, WGRP, 'w', '-' };
  88. int     m6[] = { 2, SGID, 's', XGRP, 'x', '-' };
  89. int     m7[] = { 1, ROTH, 'r', '-' };
  90. int     m8[] = { 1, WOTH, 'w', '-' };
  91. int     m9[] = { 2, STXT, 't', XOTH, 'x', '-' };
  92.  
  93. int     *m[] = { m1, m2, m3, m4, m5, m6, m7, m8, m9};
  94.  
  95.  
  96. static void select(int *pairp, int mode) {
  97.   int n, *ap;
  98.  
  99.   ap = pairp;
  100.   n = *ap++;
  101.   while (--n >= 0 && (mode & *ap++) == 0)
  102.     ap++;
  103.   printf("%c", *ap);
  104. } /* select */
  105.  
  106.  
  107. void pmode(int mode) {
  108.   int **mp;
  109.  
  110.   for (mp = &m[0]; mp < &m[9];)
  111.     select(*mp++, mode);
  112. } /* pmode */
  113.